# -*- coding: utf-8 -*-

#类属性

class Person():
    pass
class Cat():
    pass
class Dog:
    pass

per=Dog()
print(type(per))

class Student:
    school='Beij'
    #初始化方法
    def __init__(self,name,age,gender):#nameage都是方法的参数，局部变量，作用域是init方法内
        self.name=name#左侧是实例属性，name是局部变量将要用的name赋值给属性self.name
        self.age=age#实例和局部变量名字可以一样
        self.__gender=gender
    def show(self):#定义在类中 的函数，称为方法，自带一个参数的self
        print(f'我叫:{self.name},今年:{self.age}岁了')
    #静态方法不能调用实例属性，也不能调用实例方法
    @staticmethod
    def sm():
        print('静态')
    #类方法
    @classmethod
    def cm(cls):
            print('不能用实例属性和方法')
#对象
stu=Student('26',59,'男')
#实例属性，使用对象名打点调用
print(stu.name,stu.age)
#类属性，使用类名打点调用
print(Student.school)
#实例方法
stu.show()
#类方法，@classmethod进行修饰的方法，直接用类名打点使用
Student.cm()
#静态方法，@staticsmethod进行修饰的方法，直接用类名打点使用
Student.sm()

#动态绑定(属性
stu.gender='男'
print(stu.name,stu.age,stu.gender)

#动态绑定(方法
def introduce():
    print('普通变为动态stu2')
stu.fun=introduce()#函数的一个赋值

#fun就是stu2 对象的方法



#属性的设置
class Student1:
    def __init__(self,name,age,gender):
        self.name=name
        self.__gender = gender
        self.age=age

    @property
    def gender(self):
        return self.__gender

stu2 = Student1('haha',55,'女')
print(stu2.name,stu2.age,stu2.gender)